<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 局部作用域变量查找规则；
        // 全局变量
        // var a = 10;
        // function fn1() {
        //     // var a = 10;
        //     console.log(a);
        // }
        // fn1();
        // console.log(a);

        // 局部变量
        // function fn1() {
        //     var a = 10;
        //     function fn2() {
               
        //         console.log(a)
        //     }
        //    fn2(); 
        // }
        // fn1();
        // console.log(a);

        // 变量在局部作用域内的查找规则：首先会在打印的本作用域查找该变量，如果找到就直接打印，
        // 如果变量没有找到，会继续向上查找 ，上层如果找到打印，如果没找到继续向上查找最终会找到全局作用域里 ，如果全局都没有 就会报错
        // var a = 1;
        // function fn1() {
           
        //     function fn2() {
                
        //         function fn3() {
                    
        //             console.log(a);
        //         }
        //         fn3();
        //     }
        //     fn2();
        // }
        // fn1();
        // 总结：局部作用域查找变量会逐一往上层查找，直到找到 全局作用域，如果全局没有就报错。
         // 就近原则
        //    var a = 30;
        //     function fn1() {
        //         // var a = 20;
        //         function fn2() {
        //             // var a = 10;
        //             console.log(a);
        //         }
        //         fn2();
        //     }
        //     fn1();

        // 强调一点：切忌只能向上查找，不能向下查找；
        // function fn1(params) {
        //     console.log(a);
        //     function fn2(params) {
        //         var a = 10;
        //     }
        //     fn2();
        // }
        // fn1();
        // 全局作用域会包含局部作用域
        // function fn() {
        //     console.log("fn1")
        //     function fn() {
        //         console.log("fn2");
        //     }
        //     fn();
        // }
        // fn();

       



    </script>
</body>
</html>